package org.csu.myPetStore.persistence.impl;

import org.csu.myPetStore.domain.Category;
import org.csu.myPetStore.domain.CloseSource;
import org.csu.myPetStore.persistence.CategoryDAO;
import org.csu.myPetStore.persistence.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class CategoryDAOImpl implements CategoryDAO {

    private static final String GET_CATEGORY_LIST = " SELECT CATID AS categoryId , NAME,DESCN AS description FROM CATEGORY";
    private static final String GET_CATEGORY = "SELECT CATID AS categoryId, NAME, DESCN AS description FROM CATEGORY WHERE CATID = ?";

    @Override
    public List<Category> getCategoryList() {

        List<Category> categoryList = new ArrayList<Category>();

        try {
            Connection connection = DBUtil.getConnection();
            PreparedStatement preparedStatement = connection.prepareStatement(GET_CATEGORY_LIST);
            ResultSet resultSet = preparedStatement.executeQuery();

            while (resultSet.next()){
                Category category = new Category();
                category.setCategoryId(resultSet.getString(1));
                category.setName(resultSet.getString(2));
                category.setDescription(resultSet.getString(3));
                categoryList.add(category);

                CloseSource closeSource = new CloseSource();
                closeSource.closeSource(connection,preparedStatement,resultSet,null);

            }

        }catch (Exception e){
            e.printStackTrace();
        }

        return categoryList;
    }

    @Override
    public Category getCategory(String categoryId) {
        Category category = null;

        try {
            Connection connection = DBUtil.getConnection();
            PreparedStatement preparedStatement = connection.prepareStatement(GET_CATEGORY);
            preparedStatement.setString(1,categoryId);
            ResultSet resultSet = preparedStatement.executeQuery();
            if(resultSet.next()){
                category = new Category();
                category.setCategoryId(resultSet.getString(1));
                category.setName(resultSet.getString(2));
                category.setDescription(resultSet.getString(3));
            }

            CloseSource closeSource = new CloseSource();
            closeSource.closeSource(connection,preparedStatement,resultSet,null);

        }catch (Exception e){
            e.printStackTrace();
        }
        return category;
    }
}
